package br.com.caelum.tarefas.modelo;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.List;

import br.com.caelum.tarefas.util.ConnectionFactory;

public class TarefaDAO {
	
	private Connection connection;
	
	public TarefaDAO() throws ClassNotFoundException{
		this.connection = new ConnectionFactory().getConnection();
	}
	
	//insert
	public void adiciona(Tarefa tarefa){
		
		//query
		String sql = "insert into tarefas" + "(descricao, finalizado, dataFinalizacao)" + "values(?,?,?)";
		
		try{
			//prepared statement para inserção
			PreparedStatement stmt = (PreparedStatement) connection.prepareStatement(sql);
			
			//Seta os valores
			stmt.setString(1, tarefa.getDescricao());
			stmt.setBoolean(2, tarefa.isFinalizado());			
			stmt.setString(3, null); //CORRIGIR DPS
	
			//executa
			stmt.execute();
			stmt.close();
			
		}catch(SQLException e){
			throw new RuntimeException(e);
		}
	}
	
	//atualiza
	public void altera(Tarefa tarefa){
		
		//query
		String sql = "update tarefas set descricao=?, finalizado=?," + "dataFinalizacao=? where id=?";

		
		try{
			//prepared statement para atualização
			PreparedStatement stmt = (PreparedStatement) connection.prepareStatement(sql);
			
			//Seta os valores
			stmt.setString(1, tarefa.getDescricao());
			stmt.setBoolean(2, tarefa.isFinalizado());
			stmt.setDate(3, new Date(tarefa.getDataFinalizacao().getTimeInMillis()));
			stmt.setLong(4, tarefa.getId());

			
			//executa
			stmt.execute();
			stmt.close();
			
		}catch(SQLException e){
			throw new RuntimeException(e);
		}
	}
		
	//remove
	public void remove(Tarefa tarefa){
		
		//query
		String sql = "delete from tarefas where id=?";
		
		try{
			//prepared statement para remoção
			PreparedStatement stmt = (PreparedStatement) connection.prepareStatement(sql);
			
			//Seta os valores
			stmt.setLong(1, tarefa.getId());
			
			//executa
			stmt.execute();
			stmt.close();
			
		}catch(SQLException e){
			throw new RuntimeException(e);
		}
	}
	
	//lista
	public List<Tarefa> getLista(){
//		
//		try{
//			List<Tarefa> contatos = new ArrayList<Tarefa>();
//			PreparedStatement stmt = (PreparedStatement) this.connection.prepareStatement("select * from tarefas");
//			ResultSet rs = stmt.executeQuery();
//			
//			while(rs.next()){
//				//criando o contato
//				Tarefa tarefa = new Tarefa();
//				tarefa.setId(rs.getLong("id"));
//				tarefa.setDescricao(rs.getString("descricao"));
//				tarefa.setFinalizado(rs.getBoolean("finalizado"));
//				tarefa.setDataFinalizacao(new Date(rs.getDate("dataFinalizacao").getTime()));
//				
//				//montando a data através do Calendar
//				Calendar data = Calendar.getInstance();
//				data.setTime(rs.getDate("dataNascimento"));
//				contato.setDataNascimento(data);
//				
//				//adicionando o objeto a lista
//				contatos.add(contato);
//			}
//			
//			rs.close();
//			stmt.close();
//			
			return null;
//			
//		}catch(SQLException e){
//			throw new RuntimeException(e);
//
//		}
//		
//		
	}

}
